92 return -1; |
93 return -1; |
93 } else { |
94 } else { |
94 return flib_ipc_append_message(vec, "eseed %s", seed); |
95 return flib_ipc_append_message(vec, "eseed %s", seed); |
95 } |
96 } |
96 } |
97 } |
|
98 |
|
99 int flib_ipc_append_gamescheme(flib_vector vec, flib_cfg *scheme, flib_cfg_meta *meta) { |
|
100 int result = -1; |
|
101 flib_vector tempvector = flib_vector_create(); |
|
102 if(!vec || !scheme || !meta) { |
|
103 flib_log_e("null parameter in flib_ipc_append_gamescheme"); |
|
104 } else if(tempvector) { |
|
105 bool error = false; |
|
106 uint32_t gamemods = 0; |
|
107 for(int i=0; i<meta->modCount; i++) { |
|
108 if(scheme->mods[i]) { |
|
109 gamemods |= (1<<meta->mods[i].bitmaskIndex); |
|
110 } |
|
111 } |
|
112 error |= flib_ipc_append_message(tempvector, "e$gmflags %"PRIu32, gamemods); |
|
113 for(int i=0; i<meta->settingCount; i++) { |
|
114 int value = scheme->settings[i]; |
|
115 if(meta->settings[i].checkOverMax) { |
|
116 value = value>meta->settings[i].max ? meta->settings[i].max : value; |
|
117 } |
|
118 if(meta->settings[i].times1000) { |
|
119 value *= 1000; |
|
120 } |
|
121 error |= flib_ipc_append_message(tempvector, "%s %i", meta->settings[i].engineCommand, value); |
|
122 } |
|
123 |
|
124 if(!error) { |
|
125 // Message created, now we can copy everything. |
|
126 flib_constbuffer constbuf = flib_vector_as_constbuffer(tempvector); |
|
127 if(flib_vector_append(vec, constbuf.data, constbuf.size) == constbuf.size) { |
|
128 result = 0; |
|
129 } |
|
130 } |
|
131 } |
|
132 flib_vector_destroy(&tempvector); |
|
133 return result; |
|
134 } |
|
135 |
|
136 // FIXME shared ammo will break per-team ammo |
|
137 int flib_ipc_append_addteam(flib_vector vec, flib_team *team, bool perHogAmmo, bool sharedAmmo) { |
|
138 int result = -1; |
|
139 flib_vector tempvector = flib_vector_create(); |
|
140 if(!vec || !team || !team->weaponset) { |
|
141 flib_log_e("invalid parameter in flib_ipc_append_addteam"); |
|
142 } else if(tempvector) { |
|
143 bool error = false; |
|
144 error |= flib_ipc_append_message(tempvector, "eammloadt %s", team->weaponset->loadout); |
|
145 error |= flib_ipc_append_message(tempvector, "eammprob %s", team->weaponset->crateprob); |
|
146 error |= flib_ipc_append_message(tempvector, "eammdelay %s", team->weaponset->delay); |
|
147 error |= flib_ipc_append_message(tempvector, "eammreinf %s", team->weaponset->crateammo); |
|
148 if(!perHogAmmo) { |
|
149 error |= flib_ipc_append_message(tempvector, "eammstore"); |
|
150 } |
|
151 |
|
152 char *hash = team->hash ? team->hash : "00000000000000000000000000000000"; |
|
153 error |= flib_ipc_append_message(tempvector, "eaddteam %s %"PRIu32" %s", hash, team->color, team->name); |
|
154 |
|
155 if(team->remoteDriven) { |
|
156 error |= flib_ipc_append_message(tempvector, "erdriven"); |
|
157 } |
|
158 |
|
159 error |= flib_ipc_append_message(tempvector, "egrave %s", team->grave); |
|
160 error |= flib_ipc_append_message(tempvector, "efort %s", team->fort); |
|
161 error |= flib_ipc_append_message(tempvector, "evoicepack %s", team->voicepack); |
|
162 error |= flib_ipc_append_message(tempvector, "eflag %s", team->flag); |
|
163 |
|
164 // TODO bindings |
|
165 |
|
166 for(int i=0; i<team->hogsInGame; i++) { |
|
167 error |= flib_ipc_append_message(tempvector, "eaddhh %i %i %s", team->hogs[i].difficulty, team->hogs[i].initialHealth, team->hogs[i].name); |
|
168 error |= flib_ipc_append_message(tempvector, "ehat %s", team->hogs[i].hat); |
|
169 } |
|
170 |
|
171 if(!error) { |
|
172 // Message created, now we can copy everything. |
|
173 flib_constbuffer constbuf = flib_vector_as_constbuffer(tempvector); |
|
174 if(flib_vector_append(vec, constbuf.data, constbuf.size) == constbuf.size) { |
|
175 result = 0; |
|
176 } |
|
177 } |
|
178 } |
|
179 flib_vector_destroy(&tempvector); |
|
180 return result; |
|
181 } |